package com.itheima.config;

import org.springframework.context.annotation.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;

//声明Spring配置类 (添加到IOC容器中)
@Configuration
/*
    TODO 组件扫描: 会让被扫描到的bean添加到IOC容器中
    0. 需求: spring管理整个项目的bean(除web层之外)
    1. 方案一: 一项项扫描
        哪个包下的bean需要添加到spring的ioc容器(父容器),就要被扫描
        注意: com.itheima.controller是需要避开的

    2. 方案二: 扫描所有的包,排除controller包下的bean
        实现比较麻烦
        1). 使用注解的语法
            @注解名(属性1=值1,属性2=值2)
            a. 注解有且仅有一个属性需要赋值,并且名为value,value=可以省略
            b. 属性是一个数组,并且只有一个元素,大括号可以省略

 */
@ComponentScan({"com.itheima.service", "com.itheima.aspect"})
//方案一
//@ComponentScan({"com.itheima.service","com.itheima.dao"})
//方案二
//@ComponentScan(value="com.itheima",excludeFilters =
//    @ComponentScan.Filter(
//            type = FilterType.ANNOTATION,
//            classes = {Controller.class, RestController.class}
//    )
//)
//注解的用法
//@ComponentScan(value = "com.itheima")
//@ComponentScan(value = {"com.itheima.service","com.itheima.dao"})
//@ComponentScan(value = {"com.itheima.service"})
//@ComponentScan(value = "com.itheima.service")
//@ComponentScan("com.itheima.service")
//扫描com.itheima下所有的包,排除Controller和RestController注解
//@ComponentScan(value = "com.itheima",excludeFilters =
//    @ComponentScan.Filter(
//            type=FilterType.ANNOTATION,
//            classes = {Controller.class,RestController.class}
//    )
//)
//加载jdbc.properties配置文件
@PropertySource("classpath:jdbc.properties")
//导入JdbcConfig配置类
@Import({JdbcConfig.class, MyBatisConfig.class})
//启动声明式事务
@EnableTransactionManagement
//开启AOP注解
@EnableAspectJAutoProxy
public class SpringConfig {
}
